package sixlevel.letcode.arrays;

/**
 * @Auther: Lee
 * @Date: 2018/7/20 14:49
 * @Description: 给定一个排序数组，你需要在原地删除重复出现的元素，使得每个元素只出现一次，返回移除后数组的新长度。
 * 刚开始没看到是排过序的数组
 */
public class ArrayRepeat {

    public static void main(String[] args) {
        int[] a = new int[]{0, 1, 1, 2, 2, 3, 34};
        int[] b = new int[]{1, 1, 1, 1};
        int i = new ArrayRepeat().removeDuplicatesFirst(b);
        System.out.println("aaaaa" + i);
    }


    /**
     * 网上看到的
     * 这种方式实现了需求  多余的重复数据没有保存直接覆盖了
     * 刚开始看了思路 使用了从下表0开始循环的 但是那种情况只有在最后两个元素是重复的才可以使用，如果是个单独的数则会放在最后
     *
     * @param nums
     * @return
     */
    public int removeDuplicatesSecond(int[] nums) {
        if (nums == null) {
            return 0;
        }
        int index = 1;

        for (int i = 1; i < nums.length; i++) {
            if (nums[i - 1] != nums[i]) {
                nums[index] = nums[i];
                index++;
            }
        }
        return index;
    }


    public int removeDuplicatesFirst(int[] nums) {
        int temp;
        int index = nums.length - 1;
        for (int i = 0; i < nums.length - 1; i++) {
            int first = nums[i];
            for (int j = 1; j < nums.length; j++) {
                if (i >= j) {
                    continue;
                }
                int second = nums[j];
                if (first == second) {
                    if (j == index + 1) {
                        continue;
                    }
                    temp = second;
                    nums[j] = nums[index];
                    nums[index] = temp;
                    index--;
                }

            }
        }
        for (int a : nums) {
            System.out.println(a);
        }
        return index + 1;
    }

}
